/**
 *    Copyright 2009-2015 the original author or authors.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */
package org.apache.ibatis.builder;

import java.util.List;

import org.apache.ibatis.mapping.Discriminator;
import org.apache.ibatis.mapping.ResultMap;
import org.apache.ibatis.mapping.ResultMapping;

/**
 * @author Eduardo Macarron
 */
/**
 * 结果映射解析器
 *
 */
public class ResultMapResolver {
	/**
	 * 映射构建器助手
	 */
	private final MapperBuilderAssistant assistant;
	/**
	 * id
	 */
	private String id;
	/**
	 * 类型
	 */
	private Class<?> type;
	/**
	 * 继承
	 */
	private String extend;
	/**
	 * 鉴定器
	 */
	private Discriminator discriminator;
	/**
	 * 结果集列表
	 */
	private List<ResultMapping> resultMappings;
	/**
	 * 自动映射
	 */
	private Boolean autoMapping;

	/**
	 * 构造器
	 * 
	 * @param assistant
	 *            映射构建器助手
	 * @param id
	 * @param type
	 *            类型
	 * @param extend
	 *            继承
	 * @param discriminator
	 *            鉴定器
	 * @param resultMappings
	 *            结果集列表
	 * @param autoMapping
	 *            自动映射
	 */
	public ResultMapResolver(MapperBuilderAssistant assistant, String id, Class<?> type, String extend,
			Discriminator discriminator, List<ResultMapping> resultMappings, Boolean autoMapping) {
		this.assistant = assistant;
		this.id = id;
		this.type = type;
		this.extend = extend;
		this.discriminator = discriminator;
		this.resultMappings = resultMappings;
		this.autoMapping = autoMapping;
	}

	/**
	 * 解析
	 * 
	 * @return
	 */
	public ResultMap resolve() {
		// 解析又去调用MapperBuilderAssistant.addResultMap
		return assistant.addResultMap(this.id, this.type, this.extend, this.discriminator, this.resultMappings,
				this.autoMapping);
	}

}